﻿#region << 版 本 注 释 >>
/*----------------------------------------------------------------
// Copyright (C) 2021 kingerrobot
// 版权所有。 
//
// 文件名：BProdSku
// 文件功能描述：
//
// 创建者：名字 (zzl)
// 时间：2021/12/9 8:33:13
//
// 修改人：
// 时间：
// 修改说明：
// 版本：V1.0.0
//----------------------------------------------------------------*/
#endregion
using System.Threading.Tasks;

namespace KingerRobot.MexicoSailunMDC.SpiService;

internal class BProdSku : IProdSku
{
    public POProdSku CreateProdSku(ProdSkuBean prodSkuBean)
    {
        var skuCode = prodSkuBean.SkuCode;
        var materialId = prodSkuBean.MaterialId;
        var productBatch = prodSkuBean.ProductBatch;
        var mdTime = prodSkuBean.MdTime;
        var result = new POProdSku
        {
            Id = XID.Nextval,
            SkuCode = skuCode,
            MaterialId = materialId,
            ProductBatch = productBatch,
            MdTime = mdTime,
        };
        var db = Db.Default;
        db.ProdSkus.Insert(result);
        return result;
    }

    public POProdSku DeleteProSku(string skuCode)
    {
        var db = Db.Default;
        var result = GetProdSkuBySkuCode(skuCode);
        if (result != null)
        {
            db.ProdSkus.Remove(result);
            var num = db.SaveChanges();
            if (num == 0)
            {
                return null;
            }
            return result;
        }
        return result;
    }

    public POProdSku GetProdSkuById(long? skuId)
    {
        var db = Db.Default;
        var result = db.ProdSkus.Where(t => t.Id == skuId).FirstOrDefault();
        return result;
    }

    public long GetProdSkuMaterialIdBySkuId(long? skuId) => GetProdSkuById(skuId)?.MaterialId ?? 0;

    public POProdSku GetProdSkuBySkuCode(string skuCode)
    {
        var db = Db.Default;
        var result = new POProdSku();
        var prodSkus = db.ProdSkus.Where(t => t.SkuCode == skuCode).OrderByDescending(t => t.CreateTime).ToList();


        //经常出现重复数据无法执行的情况   加个数据过滤   郭海朋  2023年5月10日
        if (prodSkus.Count() > 1)
        {
            //有多个SKU信息
            //去任务表里对一下
            foreach (var item in prodSkus)
            {
                var count = db.WcsTasks.Where(T => T.SkuId == item.Id).Count();
                if (count > 0)
                {
                    //找到任务对应的数据了  返回这条
                    result = item;
                    //break;
                    return result;
                }
                result = prodSkus.FirstOrDefault();
                return result;
            }
        }
        else
        {
            result = prodSkus.FirstOrDefault();
        }
        return result;
    }
    public List<POProdSku> GetProdSkuListBySkuCode(string skuCode)
    {
        var db = Db.Default;
        var result = db.ProdSkus.Where(t => t.SkuCode == skuCode).OrderByDescending(t => t.CreateTime).ToList();
        return result;
    }
    public int UpdateProdSkuMateiral(long skuId, long mateiralId)
    {
        var db = Db.Default;
        var result = db.ProdSkuProducts.Where(t => t.SkuId == skuId).Update( new POProdSkuProduct()
        {
            MaterialId = mateiralId,
            UpdateTime = DateTime.Now,
        });
        return db.SaveChanges();
    }
}
